home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / form3d / form3d.exe / SYSMET.PAS < prev   
Pascal/Delphi Source File  |  1995-05-16  |  6KB  |  186 lines

  1. unit Sysmet;
  2.  
  3. {
  4.   TSystemMetrics Class
  5.   Copyright ⌐ 1995  Alan Ciemian  All Rights Reserved
  6.  
  7.   The TSystemMetrics class acts as a wrapper to the Windows
  8.     GetSystemMetrics function. Provides easier access and allows all the
  9.     values to be determined once and cached for later use.
  10.  
  11.   This unit also creates a single TSystemMetrics object instance (SysMetrics)
  12.     to be used globally by all units that need it.
  13.  
  14.   04/26/95 - Created
  15.   05/01/95 - Initial Released
  16.  
  17.   05/16/95 - Added GetWindowsVersion procedure.
  18. }
  19.  
  20.  
  21. interface
  22.  
  23. uses
  24.   WinTypes;
  25.  
  26.  
  27. type
  28.   TSystemMetrics = class(TObject)
  29.   private
  30.     FBorder           : TSize;   { Size of a non-sizeable window border }
  31.     FFrame            : TSize;   { Size of a sizeable window frame }
  32.     FDlgFrame         : TSize;   { Size of a dialog frame }
  33.     FMenuH            : Integer; { Height of single-line menu - border height }
  34.     FCaptionH         : Integer; { Height of window caption + border height }
  35.     FTitleBitmap      : TSize;   { Size of title bar bitmaps }
  36.     FHScrollBtn       : TSize;   { Size of arrow button on horz scroll bar }
  37.     FVScrollBtn       : TSize;   { Size of arrow button on vert scroll bar }
  38.     FScrollThumb      : TSize;   { Size of scroll thumb, cx for horz, cy for vert }
  39.     FFullScreenClient : TSize;   { Size of client area of a full screen window }
  40.     FMinWindow        : TSize;   { Minimum size of a window }
  41.     FMinTrack         : TSize;   { Minimum tracking size of a window }
  42.     FCursor           : TSize;   { Size of a cursor }
  43.     FIcon             : TSize;   { Size of an Icon }
  44.     FDoubleClick      : TSize;   { Size of rect used to determine double-clicks }
  45.     FIconSpacing      : TSize;   { Size of rect used to tile icons }
  46.   protected
  47.     constructor Create;
  48.     procedure CacheMetrics;
  49.   public
  50.     property Border:           TSize    read FBorder;
  51.     property Frame:            TSize    read FFrame;
  52.     property DlgFrame:         TSize    read FDlgFrame;
  53.     property MenuH:            Integer  read FMenuH;
  54.     property CaptionH:         Integer  read FCaptionH;
  55.     property TitleBitmap:      TSize    read FTitleBitmap;
  56.     property HScrollBtn:       TSize    read FHScrollBtn;
  57.     property VScrollBtn:       TSize    read FVScrollBtn;
  58.     property ScrollThumb:      TSize    read FScrollThumb;
  59.     property FullScreenClient: TSize    read FFullScreenClient;
  60.     property MinWindow:        TSize    read FMinWindow;
  61.     property MinTrack:         TSize    read FMinTrack;
  62.     property Cursor:           TSize    read FCursor;
  63.     property Icon:             TSize    read FIcon;
  64.     property DoubleClick:      TSize    read FDoubleClick;
  65.     property IconSpacing:      TSize    read FIconSpacing;
  66.   end;
  67.  
  68. type
  69.   TWindowsVersion = ( osWin16, osWin95, osWinNT, osUnknown );
  70.  
  71. procedure GetWindowsVersion
  72.   (
  73.   var Version  : TWindowsVersion;
  74.   var VerMajor : Word;
  75.   var VerMinor : Word
  76.   );
  77.  
  78.  
  79. var  { Create an instance }
  80.   SysMetrics : TSystemMetrics;
  81.  
  82.  
  83. implementation
  84.  
  85. uses
  86.   SysUtils,
  87.   WinProcs;
  88.  
  89.  
  90. constructor TSystemMetrics.Create;
  91. begin
  92.   inherited Create;
  93.   CacheMetrics;
  94. end;
  95.  
  96.  
  97. procedure TSystemMetrics.CacheMetrics;
  98. begin
  99.   FBorder.cx           := GetSystemMetrics(SM_CXBORDER);
  100.   FBorder.cy           := GetSystemMetrics(SM_CYBORDER);
  101.   FFrame.cx            := GetSystemMetrics(SM_CXFRAME);
  102.   FFrame.cy            := GetSystemMetrics(SM_CYFRAME);
  103.   FDlgFrame.cx         := GetSystemMetrics(SM_CXDLGFRAME);
  104.   FDlgFrame.cy         := GetSystemMetrics(SM_CYDLGFRAME);
  105.   FMenuH               := GetSystemMetrics(SM_CYMENU);
  106.   FCaptionH            := GetSystemMetrics(SM_CYCAPTION);
  107.   FTitleBitmap.cx      := GetSystemMetrics(SM_CXSIZE);
  108.   FTitleBitmap.cy      := GetSystemMetrics(SM_CYSIZE);
  109.   FHScrollBtn.cx       := GetSystemMetrics(SM_CXHSCROLL);
  110.   FHScrollBtn.cy       := GetSystemMetrics(SM_CYHSCROLL);
  111.   FVScrollBtn.cx       := GetSystemMetrics(SM_CXVSCROLL);
  112.   FVScrollBtn.cy       := GetSystemMetrics(SM_CYVSCROLL);
  113.   FScrollThumb.cx      := GetSystemMetrics(SM_CXHTHUMB);
  114.   FScrollThumb.cy      := GetSystemMetrics(SM_CYVTHUMB);
  115.   FFullScreenClient.cx := GetSystemMetrics(SM_CXFULLSCREEN);
  116.   FFullScreenClient.cy := GetSystemMetrics(SM_CYFULLSCREEN);
  117.   FMinWindow.cx        := GetSystemMetrics(SM_CXMIN);
  118.   FMinWindow.cy        := GetSystemMetrics(SM_CYMIN);
  119.   FMinTrack.cx         := GetSystemMetrics(SM_CXMINTRACK);
  120.   FMinTrack.cy         := GetSystemMetrics(SM_CYMINTRACK);
  121.   FCursor.cx           := GetSystemMetrics(SM_CXCURSOR);
  122.   FCursor.cy           := GetSystemMetrics(SM_CYCURSOR);
  123.   FIcon.cx             := GetSystemMetrics(SM_CXICON);
  124.   FIcon.cy             := GetSystemMetrics(SM_CYICON);
  125.   FDoubleClick.cx      := GetSystemMetrics(SM_CXDOUBLECLK);
  126.   FDoubleClick.cy      := GetSystemMetrics(SM_CYDOUBLECLK);
  127.   FIconSpacing.cx      := GetSystemMetrics(SM_CXICONSPACING);
  128.   FIconSpacing.cy      := GetSystemMetrics(SM_CYICONSPACING);
  129. end;
  130.  
  131.  
  132. {
  133. GetWindowsVersion determines the version and version number of Windows.
  134. It is designed for use in a Win16 executable.
  135. Notes: Win16 GetVersion should never return (3 < VerMajor)
  136.        For (VerMajor = 3), expect only (VerMinor = 0, 10)
  137. }
  138. procedure GetWindowsVersion
  139.   (
  140.   var Version  : TWindowsVersion;
  141.   var VerMajor : Word;
  142.   var VerMinor : Word
  143.   );
  144. var
  145.   CodedVersion : Word;
  146.   IsNT         : Boolean;
  147. begin
  148.   CodedVersion := LOWORD(GetVersion);
  149.   VerMajor := LOBYTE(CodedVersion);
  150.   VerMinor := HIBYTE(CodedVersion);
  151.  
  152.   IsNT := ( (GetWinFlags and $4000) <> 0 );
  153.  
  154.   if ( IsNT ) then
  155.     begin
  156.     Version := osWinNT;
  157.     end
  158.   else if ( (VerMajor < 3) or
  159.             ((VerMajor = 3) and (VerMinor <= 10)) ) then
  160.     begin
  161.     Version := osWin16;
  162.     end
  163.   else if ( (VerMajor = 3) and (VerMinor = 95) ) then
  164.     begin
  165.     Version := osWin95;
  166.     end
  167.   else
  168.     begin
  169.     Version := osUnknown;
  170.     end;
  171. end;
  172.  
  173.  
  174. procedure FreeSystemMetrics; far;
  175. begin
  176.   SysMetrics.Free;
  177. end;
  178.  
  179.  
  180. initialization
  181.  
  182.   SysMetrics := TSystemMetrics.Create;
  183.   AddExitProc(FreeSystemMetrics);
  184.  
  185. end.
  186.